﻿# down8 is a riff on downwell's core mechanic
# three levels (cheat code to skip to the end)
# 2015 tinaun

:alias px v3
:alias py v4
:alias vy v5
:alias combo v6
:alias inair v7
:alias sx v8
:alias sy v9 
:alias pos vB
:alias hashit vC
:alias health vD

: bop
	if inair == 1 then return
	inair := 1
  	vy := -2

	drawscore
	combo += 1
	i := maxcombo
	bcd combo
	drawscore

	
	i := plats
	load v2
	if py <= 9 begin
		sy := 8
		sx := v0
	else if py <= 17 begin
		sy := 16
		sx := v1
	else
		sy := 24
		sx := v2
	end
	end

	i := level
	load v0
	i := easy
	if v0 >= 10 then i := med
	if v0 >= 20 then i := hard
	sprite sx sy 2

	hashit := 1
  return

: drawscore
	i := maxcombo
	load v2
	sx := 49
	sy := 26
  	i := hex v0
  	sprite sx sy 5
  	sx += 5
	i := hex v1
	sprite sx sy 5
	sx += 5
	i := hex v2
	sprite sx sy 5
	sx += -10
  return

: drawlevel
	i := level
	load v0
	v0 += 1
	i := level
	save v0

	clear
	drawbg
	drawscore
	drawhealth
	i := level
	load v0
	i := easy
	if v0 >= 10 then i := med
	if v0 >= 20 then i := hard
  	sy := 8
	sx := random 15
	sx += 12
	v0 := sx
	sprite sx sy 2
	sy := 16
	sx := random 15
	sx += 12
	v1 := sx
	sprite sx sy 2
	sy := 24
	sx := random 15
	sx += 12
	v2 := sx
	sprite sx sy 2
	py := 0
	i := plats
	save v2

	i := person
	sprite px py 2

	vf := 20
	pause
  return

: pause
	delay := vf
	loop
		vf := delay
		if vf != 0 then
	again
	return

: grav
	vy += 1
	if vy == 1 then inair := 0
  return

: checkcombo
	i := plats
	load v2
	if v0 == 0 then return
	if hashit == 0 begin
		vf := 10
		buzzer := vf
		i := hcombo
		load v0
		if v0 < combo then v0 := combo
		i := hcombo
		save v0
		combo := 0
		drawscore
		i := maxcombo
		bcd combo
		drawscore
		drawhealth
		health += -1
		if health != 0xFF then drawhealth

	end
	hashit := 0
  return 

: drawbg
	i := level
	load v0

	sx := 0
	sy := 0
	i := lside
	if v0 >= 10 then i := lside2
	if v0 >= 20 then i := lside3
	sprite sx sy 8
	sy += 8
	sprite sx sy 8
	sy += 8
	sprite sx sy 8
	sy += 8
	sprite sx sy 8
	sx := 33
	sy := 0
	i := rside
	if v0 >= 10 then i := lside2
	if v0 >= 20 then i := rside3
	sprite sx sy 8
	sy += 8
	sprite sx sy 8
	sy += 8
	sprite sx sy 8
	sy += 8
	sprite sx sy 8
  return

: drawhealth
	sx := 57
	sy := 1
	i := hex health
	sprite sx sy 5
	sy += 5
	i := slash
	sprite sx sy 3
	sy += 4
	sx := 4
	i := hex sx
	sx := 59
	sprite sx sy 5
	i := person
  return

: drawimage
	va := 0  # x
    	vb := 0  # y
    	vc := 8  # stride
    	loop
        	sprite va vb 8
        	i  += vc
        	va += vc
        	if va == 64 then vb +=  8
        	if va == 64 then va := 0
        if vb != 32 then
    	again
	return 

: gover
	vf := 30
	pause
	clear
	i := dead
	drawimage
	i := hcombo
	load v0
	i := maxcombo
	bcd v0
	drawscore
	i := level
	load v0
	bcd v0
	load v2
	sx := 1
	sy := 1
	i := L
	sprite sx sy 5
	sx += 5
	i := E
	sprite sx sy 5
	sx += 5
	i := V
	sprite sx sy 5
	sx += 10
	i := hex v1
	sprite sx sy 5
	sx += 5
	sy := 3
	i := E
	sprite sx sy 1
	i := hex v2
	sx += 5
	sy := 1
	sprite sx sy 5

	sx := 26
	sy := 26
	i := M
	sprite sx sy 5
	sx += 6
	i := A
	sprite sx sy 5
	sx += 6
	i := X
	sprite sx sy 5
		
	combo := 0
	i := maxcombo
	bcd combo
	i := plats
	v0 := 0
	v1 := 0
	v2 := 0
	save v2
	i := level
	save v0
	loop
		vA := 5 if vA key then jump restart
	again

: setboss
	i := level
	load v0
	if v0 == 0 begin v0 := 40 else v0 := 0 end
	i := level
	save v0
	sx := 20
	sy := 20
	i := b
	sprite sx sy 5
	i := o
	sx += 4
	sprite sx sy 4
	i := ss
	sx += 4
	sprite sx sy 4
	sx += 3
	sprite sx sy 4
	i := tperson
	return

: main
	i := title
	drawimage
		px := 4
		py := 0
		i := person
		sprite px py 2
		i := tperson
	loop
		sprite px py 3
		py += 1
		vA := 15 if vA key then setboss
		vA := 5 if vA key then jump man
		vf := 3
		pause
	again
: man
	clear
	i := inst
	drawimage
	i := platmove
	px := 45
	py := 23
	loop
		sprite px py 2
		vA := 5 if vA key then jump restart
		vf := 20
		pause
	again
: restart
	clear
	drawbg
	px := 19
	py := 0
	hashit := 0
	vy := 1
	health := 4
	drawscore
	drawhealth
	i := person
	sprite px py 2
	

	loop
		# erase the player, update its position and then redraw:
		sprite px py 2
		
		vA := 9   if vA key then px +=  1 # keyboard A
		vA := 7   if vA key then px += -1 # keyboard D
		if px == 7 then px += 1
		if px == 32 then px += -1

		py += vy
		if vy != 2 then vy += 1
		vA := 5   if vA key begin inair := 1 else inair := 0 end
		

		sprite px py 2
		if vF == 1 then bop
		
		if py == 10 then checkcombo
		if py == 18 then checkcombo
		if py == 26 then checkcombo
		i := person

		if py >= 31 then drawlevel

		if health == -1 then jump gover

		# lock the framerate of this program via the delay timer:
		loop
			vf := delay
			if vf != 0 then
		again
		vf := 3
		delay := vf
	again

: tperson
	0xC0 0x00
: person
	0xC0 0xC0
: easy 
	0xF0 0x60
: med
	0xE0 0x40
: hard
	0x40 0x40

: platmove
	0x41 0x22

: maxcombo
        0x00 0x00 0x00
: hcombo
	0x00
: plats
	0x00 0x00 0x00
: level
	0x00 0x00 0x00 0x00

: lside
	0x1E 0xAB 0x55 0x01 0x2B 0x01 0x55 0x01 
: rside
	0x70 0xAA 0xD4 0x80 0xAA 0x80 0xD4 0x80 
: lside2
	0xFE 0x01 0x7F 0x80 0xFE 0x01 0x7F 0x80 
: lside3
	0x15 0x09 0x01 0x85 0x41 0x81 0x01 0x09
: rside3
	0x82 0x85 0x82 0x80 0x90 0xA8 0x91 0x80
: slash
	0x04 0x38 0x40
: M
	0x50 0xA8 0xA8 0xA8 0x88
: A
	0x70 0x48 0x88 0xF8 0x88
: X
	0x80 0x58 0x20 0x50 0xC8
: L
	0x80 0x80 0x80 0x80
: E
 	0xF0 0x80 0xE0 0x80 0xF0
: V
	0x90 0x90 0xA0 0x60 0x40
: b
	0xC0 0xA0 0xC0 0xA0 0xC0 
: o
	0xE0 0xA0 0xA0 0xE0 
: ss
	0x40 0x80 0x40 0x80

: dead
	0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF
        0x0A 0x0A 0x0A 0x0A 0x0A 0x0A 0x0A 0xF2
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        0x00 0x00 0x20 0x51 0x00 0x04 0x08 0x00
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x80
        0x00 0xFF 0x00 0x00 0x00 0x00 0x00 0x08
        0x00 0xFF 0x00 0x00 0x00 0x00 0x00 0x8F
        0x00 0xFF 0x00 0x00 0x00 0x00 0x00 0x22
        0x00 0xFF 0x00 0x00 0x00 0x00 0x00 0x00
        0x04 0xF8 0x00 0x00 0x08 0x08 0x08 0x79
        0x00 0x00 0x00 0x00 0x60 0x60 0x00 0xC1
        0x01 0x02 0x00 0x00 0x00 0x00 0x00 0xE3
        0x40 0x80 0x00 0x00 0x40 0x40 0x40 0xC0
        0x08 0x0D 0x05 0x05 0x02 0x02 0x04 0x1C
        0x99 0x10 0x10 0x19 0x0F 0x00 0x00 0x00
        0xA2 0xA2 0xA2 0xA6 0x1E 0x00 0x00 0x00
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        0x88 0x88 0x88 0x98 0x69 0x00 0x00 0x00
        0x42 0x43 0x42 0x43 0xF1 0x00 0x00 0x00
        0x14 0xF4 0x04 0x04 0xF3 0x00 0x00 0x00
        0x40 0x40 0x40 0xC6 0x46 0x00 0x00 0x00
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        0x00 0x20 0x02 0x00 0x1C 0x22 0x41 0x00
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        0x7F 0x80 0x80 0x80 0x80 0x80 0x80 0x80
        0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00

: title # (256 bytes)
        0x61 0x81 0xA0 0x81 0xA0 0x81 0xA0 0x81
        0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        0xFF 0x00 0x00 0x30 0x30 0x30 0x30 0x30
        0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        0xFF 0x00 0x00 0x00 0x1E 0x7F 0x61 0x61
        0xFE 0x01 0x01 0x01 0x01 0x01 0x81 0x81
        0xA0 0x81 0xA0 0x81 0xA0 0x81 0xA0 0x81
        0x03 0x07 0x0E 0x0C 0x0C 0x0E 0x07 0x03
        0xF1 0xF3 0x36 0x36 0x36 0x36 0xF3 0xF1
        0xC6 0xE6 0x36 0x36 0x36 0x36 0xE3 0xC3
        0x66 0x66 0x66 0xF6 0xD6 0xD6 0x9C 0x9C
        0xDC 0xFE 0xE6 0xC6 0xC6 0xC6 0xC6 0xC6
        0x7F 0x3F 0x73 0x61 0x61 0x61 0x7F 0x1E
        0x01 0x01 0x81 0x81 0x81 0x81 0x01 0x01
        0xA0 0x81 0xA0 0x81 0xA0 0x81 0xA0 0x81
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
        0x00 0x00 0x00 0x00 0x00 0x03 0x02 0x02
        0x00 0x00 0x00 0x00 0x00 0x01 0x44 0x54
        0x01 0x01 0x01 0x01 0x01 0x81 0x81 0x81
        0xA0 0x81 0xA0 0x81 0xA0 0x81 0xA0 0x61
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF
        0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF
        0x02 0x02 0x03 0x00 0x00 0x00 0x00 0xFF
        0x54 0x28 0x01 0x00 0x00 0x00 0x00 0xFF
        0x81 0x81 0x81 0x01 0x01 0x01 0x01 0xFE

: inst # (256 bytes)
        0x7F 0x80 0x80 0x80 0x80 0x8F 0x90 0x93
        0xFF 0x00 0x00 0x00 0x00 0x00 0xF0 0x8F
        0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x87
        0xFF 0x00 0x00 0x00 0x00 0x03 0x3C 0xC7
        0xFF 0x00 0x00 0x00 0x01 0xC1 0x21 0x21
        0xFF 0x00 0x00 0xFF 0x00 0x00 0x00 0x24
        0xFF 0x00 0x0F 0xF8 0x00 0x00 0x00 0xE7
        0xFE 0x01 0xE1 0x11 0x11 0x11 0x11 0x11
        0x94 0x94 0x94 0x94 0x94 0x94 0x94 0x94
        0x00 0x00 0x06 0x09 0x09 0x0F 0x09 0x00
        0x48 0x30 0x03 0x02 0x32 0x02 0x03 0x30
        0x00 0x00 0x80 0x40 0x40 0x40 0x80 0x00
        0xA1 0xA1 0xA1 0xA1 0xA1 0xA1 0xA1 0xA1
        0x24 0x3C 0x24 0x24 0x00 0x00 0x00 0x00
        0x42 0x42 0x42 0xE2 0x00 0x00 0x00 0x40
        0x11 0x11 0x11 0x11 0x11 0x11 0x11 0x11
        0x94 0x94 0x94 0x94 0x94 0x94 0x94 0x94
        0x00 0x10 0x20 0x7F 0x20 0x10 0x00 0x00
        0x00 0x00 0x30 0x03 0x00 0x30 0x00 0x00
        0x00 0x20 0x10 0xF8 0x10 0x20 0x00 0x00
        0xA1 0xA1 0xA1 0xA1 0xA1 0xA1 0xA1 0xA1
        0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x03
        0x40 0x50 0xE0 0x40 0x00 0x00 0x00 0xF0
        0x11 0x11 0x11 0x11 0x11 0x11 0x31 0x11
        0x94 0x94 0x8B 0x87 0x80 0x80 0x80 0x7F
        0x00 0x78 0xC7 0xF0 0x0F 0x00 0x00 0xFF
        0x30 0x00 0x87 0xFC 0xFF 0x00 0x00 0xFF
        0x00 0x78 0x8F 0x7F 0x80 0x00 0x00 0xFF
        0xA1 0xA1 0xC1 0x00 0x00 0x00 0x00 0xFF
        0x01 0x00 0x80 0x83 0xBC 0x60 0x00 0xFF
        0xE0 0x00 0x00 0xFF 0x00 0x00 0x00 0xFF
        0x11 0x11 0x51 0x11 0xF1 0x01 0x01 0xFE